寻址方式
立即数寻址
#0XXH
直接传入立即数0XXH
直接寻址
0XXH
将 XXH 地址里的数据传入
寄存器寻址
寄存器
可寻址寄存器: R0~R7 A B DPTR
寄存器间接寻址
@寄存器
寄存器内部数据作为地址,找对应地址的寄存器的数据
可间接寻址寄存器
- R0、R1 DPTR
MOVX A,@DPTR
MOVX A,@R0
@R0
是一个间接寻址方式的表示,@
符号用来指示间接寻址,R0
是寄存器的标识,表示使用 R0
寄存器中的值作为内存地址的偏移量。在这个上下文中,R0
寄存器包含了一个内存地址,而 @R0
表示访问 R0
指向的内存地址中的数据。
变址寻址
基址+变址 MOVC A,@A+DPTR
查找表访问程序空间
在 C51 单片机(如 Intel 8051 系列)中,MOVC A,@A+DPTR
是一条查表指令,用于从程序存储器(ROM)中读取数据,并将其存入累加器 A(A 寄存器)。这条指令的工作原理如下:
DPTR
是数据指针寄存器,是一个 16 位寄存器,它可以存储一个 16 位地址,通常用来指向程序存储器或外部数据存储器中的某个区域。A
是累加器寄存器,也是 8 位寄存器,用于运算和暂存数据。@A+DPTR
表示变址寻址方式,这里的@A
并非是指累加器 A 中的内容,而是指累加器 A 的内容作为一个 8 位偏移量。- 当执行
MOVC A,@A+DPTR
指令时,CPU 会首先将累加器 A 的内容与 DPTR 的内容进行逻辑拼接(高位扩展 A 至 16 位并与 DPTR 合并),形成一个完整的 16 位地址。 - CPU 随后会根据这个拼接后形成的地址从程序存储器中读取一个字节数据。
- 最后,这个从程序存储空间读出的字节数据会被存入累加器 A。
此指令常常用于执行查表操作,比如当程序需要快速查找预先存放在程序存储器中的一张表格时,通过设置 DPTR 指向表格的首地址,然后利用 A 寄存器作为索引偏移量来快速获取表格中的特定数据项。由于 C51 单片机的程序存储器可以被映射为数据空间的一部分,因此可以直接从中读取数据,这对于诸如字符发生器表、函数表等应用场景非常实用。
相对寻址
SJMP
相对跳转
位寻址
SETB